From dbd6b4af3f1ffd120918c9bf2096ba6bfd7efc47 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Wed, 4 Nov 2015 01:20:36 +0000 Subject: [PATCH] Title: Add warning if newFromText is given non-string/non-null value Specify null as allowed value to make this method more easy to use. The method is often used like that already and this makes it official. Previously we were on a months-long trajectory to try and remove all instances of passing null, but it was a never-ending quest (with new ones introduced all the time). And in all cases the added handling in the caller is the same as the handling for when this method returns null. Requiring the caller to bounce null makes code more complex, duplicates logic and serves no reason. Let this method be a non-throwing validation method that returns null if given null. Bug: T76305 Change-Id: I47517021471ac6fd6daca6deee039c8047224a33 --- includes/Title.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/includes/Title.php b/includes/Title.php index 9ada4f314d..82df19f986 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -252,7 +252,7 @@ class Title { * Create a new Title from text, such as what one would find in a link. De- * codes any HTML entities in the text. * - * @param string $text The link text; spaces, prefixes, and an + * @param string|null $text The link text; spaces, prefixes, and an * initial ':' indicating the main namespace are accepted. * @param int $defaultNamespace The namespace to use if none is specified * by a prefix. If you want to force a specific namespace even if @@ -264,13 +264,13 @@ class Title { public static function newFromText( $text, $defaultNamespace = NS_MAIN ) { if ( is_object( $text ) ) { throw new InvalidArgumentException( '$text must be a string.' ); - } elseif ( !is_string( $text ) ) { + } + if ( $text !== null && !is_string( $text ) ) { wfDebugLog( 'T76305', wfGetAllCallers( 5 ) ); - wfWarn( - __METHOD__ . ': $text must be a string. ' . - 'This will throw an InvalidArgumentException in future.', - 2 - ); + return null; + } + if ( $text === null ) { + return null; } try { @@ -296,7 +296,7 @@ class Title { */ public static function newFromTextThrow( $text, $defaultNamespace = NS_MAIN ) { if ( is_object( $text ) ) { - throw new MWException( 'Title::newFromTextThrow given an object' ); + throw new MWException( '$text must be a string, given an object' ); } $cache = self::getTitleCache(); -- 2.20.1